import pymysql
import pandas as pd
from Database import DatabaseHandler

db_handler = DatabaseHandler(host='localhost', port=3306, user='root', password='123456')
db_handler.create_database('test')
db_handler.cursor.execute('USE test')

# 创建表
sql = '''      
CREATE TABLE IF NOT EXISTS profession_in_school(      
    Subjects_big_class VARCHAR(225),      
    Subjects_small_class VARCHAR(225),      
    profession_type VARCHAR(225),      
    school VARCHAR(225)      
)      
'''
db_handler.cursor.execute(sql)

# 确保使用正确的函数读取文件
df = pd.read_excel('C:/Users/姚宇康/Desktop/日常文件/学习/专业到学校.xlsx')  # 添加 encoding 参数以处理可能的编码问题
df.fillna('', inplace=True)  # 填充空值为空字符串

# 将 DataFrame 转换为列表的元组（因为 executemany 需要这种格式）
data_to_insert = df.to_dict(orient='records')

# 插入数据，明确指定列名
sql_insert = 'INSERT INTO profession_in_school VALUES (%s, %s, %s, %s)'

try:
    for i in data_to_insert:
        li = list(i.values())
        print(li)
        db_handler.cursor.execute(sql_insert, li)  # 插入数据
        print(db_handler.cursor.rowcount, "记录插入成功。")  # 注意：在某些情况下，cursor.rowcount 可能不返回实际插入的行数
except pymysql.MySQLError as e:
    print(f"数据库错误：{e}")

# 关闭游标和连接
db_handler.close_connection()

# 注意：在某些版本的 pymysql 中，cursor.rowcount 可能不总是返回准确的行数，
# 特别是在使用 executemany 时。如果需要确切的行数，可能需要其他方法，
# 如在数据库中创建一个触发器或使用其他数据库特性来跟踪。